package cn.stylefeng.guns.modular.xlzdb.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.stylefeng.guns.core.exception.BusinessException;
import cn.stylefeng.guns.modular.xlzdb.entity.Xlzdb;
import cn.stylefeng.guns.modular.xlzdb.enums.XlzdbExceptionEnum;
import cn.stylefeng.guns.modular.xlzdb.mapper.XlzdbMapper;
import cn.stylefeng.guns.modular.xlzdb.pojo.request.XlzdbRequest;
import cn.stylefeng.guns.modular.xlzdb.service.XlzdbService;
import cn.stylefeng.roses.kernel.db.api.factory.PageFactory;
import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory;
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 线路站点表业务实现层
 *
 * @author zhu
 * @date 2021/10/06 12:52
 */
@Service
public class XlzdbServiceImpl extends ServiceImpl<XlzdbMapper, Xlzdb> implements XlzdbService {

	@Override
    public void add(XlzdbRequest xlzdbRequest) {
        Xlzdb xlzdb = new Xlzdb();
        BeanUtil.copyProperties(xlzdbRequest, xlzdb);
        this.save(xlzdb);
    }

    @Override
    public void del(XlzdbRequest xlzdbRequest) {
        Xlzdb xlzdb = this.queryXlzdb(xlzdbRequest);
        this.removeById(xlzdb.getId());
    }

    @Override
    public void edit(XlzdbRequest xlzdbRequest) {
        Xlzdb xlzdb = this.queryXlzdb(xlzdbRequest);
        BeanUtil.copyProperties(xlzdbRequest, xlzdb);
        this.updateById(xlzdb);
    }

    @Override
    public Xlzdb detail(XlzdbRequest xlzdbRequest) {
        return this.queryXlzdb(xlzdbRequest);
    }

    @Override
    public PageResult<Xlzdb> findPage(XlzdbRequest xlzdbRequest) {
        LambdaQueryWrapper<Xlzdb> wrapper = createWrapper(xlzdbRequest);
        Page<Xlzdb> sysRolePage = this.page(PageFactory.defaultPage(), wrapper);
        return PageResultFactory.createPageResult(sysRolePage);
    }

    @Override
    public List<Xlzdb> findList(XlzdbRequest xlzdbRequest) {
        LambdaQueryWrapper<Xlzdb> wrapper = this.createWrapper(xlzdbRequest);
        return this.list(wrapper);
    }

    /**
     * 获取信息
     *
     * @author zhu
     * @date 2021/10/06 12:52
     */
    private Xlzdb queryXlzdb(XlzdbRequest xlzdbRequest) {
        Xlzdb xlzdb = this.getById(xlzdbRequest.getId());
        if (ObjectUtil.isEmpty(xlzdb)) {
            throw new BusinessException(XlzdbExceptionEnum.XLZDB_NOT_EXISTED);
        }
        return xlzdb;
    }

    /**
     * 创建查询wrapper
     *
     * @author zhu
     * @date 2021/10/06 12:52
     */
    private LambdaQueryWrapper<Xlzdb> createWrapper(XlzdbRequest xlzdbRequest) {
        LambdaQueryWrapper<Xlzdb> queryWrapper = new LambdaQueryWrapper<>();

        Long id = xlzdbRequest.getId();
        java.math.BigDecimal lc = xlzdbRequest.getLc();
        java.math.BigDecimal ptpj = xlzdbRequest.getPtpj();
        java.math.BigDecimal zdpj = xlzdbRequest.getZdpj();
        java.math.BigDecimal hhpj = xlzdbRequest.getHhpj();
        java.math.BigDecimal tbpj = xlzdbRequest.getTbpj();
        String xlbXlbh = xlzdbRequest.getXlbXlbh();
        String zdbZdbh = xlzdbRequest.getZdbZdbh();
        String xlzdzt = xlzdbRequest.getXlzdzt();
        String createTime = xlzdbRequest.getCreateTime();
        Long createUser = xlzdbRequest.getCreateUser();
        String updateTime = xlzdbRequest.getUpdateTime();
        Long updateUser = xlzdbRequest.getUpdateUser();

        queryWrapper.eq(ObjectUtil.isNotNull(id), Xlzdb::getId, id);
        queryWrapper.eq(ObjectUtil.isNotNull(lc), Xlzdb::getLc, lc);
        queryWrapper.eq(ObjectUtil.isNotNull(ptpj), Xlzdb::getPtpj, ptpj);
        queryWrapper.eq(ObjectUtil.isNotNull(zdpj), Xlzdb::getZdpj, zdpj);
        queryWrapper.eq(ObjectUtil.isNotNull(hhpj), Xlzdb::getHhpj, hhpj);
        queryWrapper.eq(ObjectUtil.isNotNull(tbpj), Xlzdb::getTbpj, tbpj);
        queryWrapper.like(ObjectUtil.isNotEmpty(xlbXlbh), Xlzdb::getXlbXlbh, xlbXlbh);
        queryWrapper.like(ObjectUtil.isNotEmpty(zdbZdbh), Xlzdb::getZdbZdbh, zdbZdbh);
        queryWrapper.like(ObjectUtil.isNotEmpty(xlzdzt), Xlzdb::getXlzdzt, xlzdzt);
        queryWrapper.eq(ObjectUtil.isNotNull(createTime), Xlzdb::getCreateTime, createTime);
        queryWrapper.eq(ObjectUtil.isNotNull(createUser), Xlzdb::getCreateUser, createUser);
        queryWrapper.eq(ObjectUtil.isNotNull(updateTime), Xlzdb::getUpdateTime, updateTime);
        queryWrapper.eq(ObjectUtil.isNotNull(updateUser), Xlzdb::getUpdateUser, updateUser);

        return queryWrapper;
    }

}